iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
Kotlin

Kotlin魔法:Spring Boot 3的fp奇幻冒險系列 第 26

[城鎮] Kotlin 與 Feign的合體之術

  • 分享至 

  • xImage
  •  

前情提要

昨天我們介紹了兩種可以打外部api的套件,一個是OkHttp,一個則是Feign,今天我們要來實際的玩玩看Feign!

安裝

pom檔

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>4.0.4</version>
        </dependency>

外部API

假設我們要打 https://jsonplaceholder.typicode.com/, 這網站來取得一些資料,我們選擇要打get,/posts/1來取得資料!

Postman

首先我們先用Postman來打打看!

Postman可以協助開發人員建立、測試和分享API請求。它可以幫助我們測試與打Api。

https://ithelp.ithome.com.tw/upload/images/20231011/20129702lTadzJV9Me.png

接著我們可以用Feign來打同樣的api,它應該要回同樣的結果。這樣就可以確定我們的程式是否真的有打到外部服務XD

Service

@FeignClient(name = "example", url = "https://jsonplaceholder.typicode.com")
interface ExampleFeignClient {

    @GetMapping("/posts/1")
    fun getPost(): String
}

我們先在Service層定義外部系統的Url,以及我們要打的api。

Controller層

這邊使用feignClient來把剛剛我們創立的Interface注入進來。

@RestController
class CustomerController @Autowired constructor(
    private val customerService: CustomerService,
    private val feignClient: ExampleFeignClient,
) {

    @GetMapping("/api/v1/test")
    suspend fun feignApi(): ResponseEntity<String> {
        return ResponseEntity.ok(feignClient.getPost())
    }
}

我們設立一個end point是/api/v1/test,然後它會打到外部的服務。
Serivice(https://jsonplaceholder.typicode.com/posts/1),

可以看到我們的Feign成功打到外部的Service! 這樣就可以把外部服務的資料來做一些處理,最後再回給我們的使用者,我們就得到更多的彈性了,有些功能需要的話,可以Call外部的服務,雖然這樣會增加依賴性,會導致對方服務掛了,我們的服務也可能跟著掛彩QQ

https://ithelp.ithome.com.tw/upload/images/20231011/2012970211niCBm8pd.png

在main的檔案加入EnableFeignClients來啟用Feign客戶端

@EnableAutoConfiguration
@EnableFeignClients
@ComponentScan(basePackages = ["controller", "service", "Repo", "utils"])
open class Main

fun main(args: Array<String>) {
    runApplication<Main>(*args)
}

總結

今天我們用Feign來打到外部的服務,這樣就可以使用外部服務來擴充我們自己的服務,比如說簽核系統,又或者是計算系統等。


上一篇
[城鎮] WireMock 模仿金屬!
下一篇
[城鎮] Kotlin 與 WireMock的融合之術
系列文
Kotlin魔法:Spring Boot 3的fp奇幻冒險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言